package com.mentalhealthplatform.utils;

import com.alibaba.excel.EasyExcel;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

public class ExportUtils {

    /**
     * 通用的导出 Excel 文件的方法
     *
     * @param response   HttpServletResponse 用于向客户端发送响应
     * @param data       要导出的数据，类型为 List<T>，可以是任何类型的集合
     * @param fileName   导出的 Excel 文件名称
     * @param clazz      要导出的数据对象类型的 Class，例如 RoleDTO.class
     * @param sheetName  Excel 表单的名称
     * @param <T>        泛型，表示数据类型
     * @throws IOException 如果发生 IO 异常，会抛出此异常
     */
    public static <T> void exportToExcel(HttpServletResponse response,
                                         List<T> data,
                                         String fileName,
                                         Class<T> clazz,
                                         String sheetName) throws IOException {
        // 设置响应头，告诉浏览器这是一个 Excel 文件
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");

        // 防止文件名出现中文乱码，进行 URL 编码
        fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        // 设置下载文件的响应头，文件名为 UTF-8 编码，浏览器会识别为附件下载
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        // 使用 EasyExcel 写数据到 Excel
        EasyExcel.write(response.getOutputStream(), clazz)
                .sheet(sheetName)
                .doWrite(data);
    }
}
